home *** CD-ROM | disk | FTP | other *** search
/ Gamers Delight 2 / Gamers Delight 2.iso / Aminet / game / role / SRunMatGen.lha / Matrix.c < prev    next >
C/C++ Source or Header  |  1994-06-26  |  55KB  |  1,349 lines

  1. /*********************************/
  2. /* MatrixGenerator für ShadowRun */
  3. /* written by Thomas Reinhardt   */
  4. /*                               */
  5. /* Spezielle Funktionen Matrix   */
  6. /*********************************/
  7. #include <time.h>
  8. #include <math.h>
  9. #include <string.h>
  10. #include <exec/interrupts.h>
  11. #include <exec/libraries.h>
  12. #include <exec/lists.h>
  13. #include <exec/memory.h>
  14. #include <exec/nodes.h>
  15. #include <exec/ports.h>
  16. #include <exec/types.h>
  17. #include <intuition/intuition.h>
  18. #include <libraries/dos.h>
  19. #include <libraries/dosextens.h>
  20. #include <proto/dos.h>
  21. #include <proto/exec.h>
  22. #include <proto/graphics.h>
  23. #include <proto/intuition.h>
  24. #include <proto/gadtools.h>
  25. #include <proto/diskfont.h>
  26. #include <stdio.h>
  27. #include <stdlib.h>
  28.  
  29. #include "MatrixGen.h"
  30. #include "all.h"
  31.  
  32. extern LONG SaveNamePointer;
  33. extern struct IntuitionBase *IntuitionBase;
  34. extern struct GfxBase *GfxBase;
  35. extern struct Library *DosBase;
  36. extern struct NewScreen MyNewScreen;
  37. extern struct Screen *MyScreen;
  38. extern struct BitMapHeader BMHD;
  39. extern struct ColorRegister Colors[16];
  40. extern struct CommodoreAmiga CAMG;
  41. extern LONG Len,xi,yi,b;
  42. extern ULONG ChunkLen;
  43. extern char *WohinDamit;
  44. extern char GfxName[255];
  45. extern char StatusName[255];
  46. extern char StandardName[255];
  47. extern char DatenFeld[255];
  48. extern BOOL success,AllDone;
  49. extern int i;
  50. extern char inread[5];
  51. extern int cBitmaps,AnzahlKnoten,AusgangsKnoten,AnzahlWichtigeDaten,Stufenwert;
  52. extern int MaxSAN,AusgangsWichtigeDaten;
  53. extern UBYTE xPos,yPos,MaxFarben,Language,OutputType;
  54. extern struct MatrixKomponenten Matrix[12*12];
  55. extern struct MatrixGenType MatrixDatas[1];
  56. extern BOOL CPUInSystem,Beenden,RandomDSValue,CheckLevelCode;
  57. extern BOOL Zufallsstufen,KeineDatenspeicher,StatusFile,PrefsFile,BlaueKnoten;
  58. extern BOOL Schatten,SaveDatenfeld,InstallNoIC,AlwaysICInfo,AlwaysICDS;
  59. extern UBYTE AnzahlCPU,AnzahlSPU,AnzahlDS,AnzahlSAN,AnzahlSN,AnzahlIOP,AnzahlBlueNodes;
  60.  
  61. void MatrixGenerierung(){
  62. ULONG MGxPos,MGyPos;
  63.     MGxPos=0;
  64.     MGyPos=5;
  65.     MaxSAN--;
  66.     CreateSAN(MGxPos,MGyPos);
  67.     Matrix[MGxPos+MGyPos*12].O=TRUE;
  68.     MGxPos+=1;
  69.     Matrix[MGxPos+MGyPos*12].W=TRUE;
  70.     CreateSPU(MGxPos,MGyPos);
  71.     }
  72.  
  73. void MatrixKorrektur(){
  74. ULONG x,y,zwsp;
  75. int StartX,EndX,SizeX;
  76. int StartY,EndY,SizeY;
  77. BOOL BackStatus;
  78.     zwsp=0;
  79.     for(y=0;y<12;y++){
  80.         for(x=0;x<12;x++){
  81.             if(Matrix[x+12*y].Type==2) zwsp++;
  82.             }
  83.         }
  84.     if(AnzahlKnoten>0){
  85.         while(AnzahlKnoten>0){
  86.             x=Zufallszahl(1,4);
  87.             switch(x){
  88.                 case 4:{StartX=1;
  89.                                 EndX=11;
  90.                                 SizeX=1;
  91.                                 StartY=1;
  92.                                 EndY=11;
  93.                                 SizeY=1;
  94.                                 break;
  95.                                 }
  96.                 case 3:{StartX=1;
  97.                                 EndX=11;
  98.                                 SizeX=1;
  99.                                 StartY=10;
  100.                                 EndY=0;
  101.                                 SizeY=-1;
  102.                                 break;
  103.                                 }
  104.                 case 2:{StartX=10;
  105.                                 EndX=0;
  106.                                 SizeX=-1;
  107.                                 StartY=1;
  108.                                 EndY=11;
  109.                                 SizeY=1;
  110.                                 break;
  111.                                 }
  112.                 case 1:{StartX=10;
  113.                                 EndX=0;
  114.                                 SizeX=-1;
  115.                                 StartY=10;
  116.                                 EndY=0;
  117.                                 SizeY=-1;
  118.                                 break;
  119.                                 }
  120.                 }
  121.             for(y=StartY;(SizeY<0?y>EndY:y<EndY);y=y+SizeY){
  122.                 for(x=StartX;(SizeX<0?x>EndX:x<EndX);x=x+SizeX){
  123.                     if(Matrix[x+12*y].Type==0){
  124.                         BackStatus=FALSE;
  125.                         if((BackStatus==FALSE)&&(Editbar(x,y-1)!=0)){
  126.                             if((BackStatus=InsertNewNode(x,y,x,y-1))==TRUE){
  127.                                 Matrix[x+12*(y-1)].S=TRUE;
  128.                                 Matrix[x+12*y].N=TRUE;
  129.                                 }
  130.                             }
  131.                         if((BackStatus==FALSE)&&(Editbar(x+1,y-1)!=0)){
  132.                             if((BackStatus=InsertNewNode(x,y,x+1,y-1))==TRUE){
  133.                                 Matrix[x+1+12*(y-1)].SW=TRUE;
  134.                                 Matrix[x+12*y].NO=TRUE;
  135.                                 }
  136.                             }
  137.                         if((BackStatus==FALSE)&&(Editbar(x+1,y)!=0)){
  138.                             if((BackStatus=InsertNewNode(x,y,x+1,y))==TRUE){
  139.                                 Matrix[x+1+12*y].W=TRUE;
  140.                                 Matrix[x+12*y].O=TRUE;
  141.                                 }
  142.                             }
  143.                         if((BackStatus==FALSE)&&(Editbar(x+1,y+1)!=0)){
  144.                             if((BackStatus=InsertNewNode(x,y,x+1,y+1))==TRUE){
  145.                                 Matrix[x+1+12*(y+1)].NW=TRUE;
  146.                                 Matrix[x+12*y].SO=TRUE;
  147.                                 }
  148.                             }
  149.                         if((BackStatus==FALSE)&&(Editbar(x,y+1)!=0)){
  150.                             if((BackStatus=InsertNewNode(x,y,x,y+1))==TRUE){
  151.                                 Matrix[x+12*(y+1)].N=TRUE;
  152.                                 Matrix[x+12*y].S=TRUE;
  153.                                 }
  154.                             }
  155.                         if((BackStatus==FALSE)&&(Editbar(x-1,y+1)!=0)){
  156.                             if((BackStatus=InsertNewNode(x,y,x-1,y+1))==TRUE){
  157.                                 Matrix[x-1+12*(y+1)].NO=TRUE;
  158.                                 Matrix[x+12*y].SW=TRUE;
  159.                                 }
  160.                             }
  161.                         if((BackStatus==FALSE)&&(Editbar(x-1,y)!=0)){
  162.                             if((BackStatus=InsertNewNode(x,y,x-1,y))==TRUE){
  163.                                 Matrix[x-1+12*y].O=TRUE;
  164.                                 Matrix[x+12*y].W=TRUE;
  165.                                 }
  166.                             }
  167.                         if((BackStatus==FALSE)&&(Editbar(x-1,y-1)!=0)){
  168.                             if((BackStatus=InsertNewNode(x,y,x-1,y-1))==TRUE){
  169.                                 Matrix[x-1+12*(y-1)].SO=TRUE;
  170.                                 Matrix[x+12*y].NW=TRUE;
  171.                                 }
  172.                             }
  173.                         }
  174.                     }
  175.                 }
  176.             }
  177.         }
  178.     while((AnzahlKnoten<1)&&(CPUInSystem==FALSE)){
  179.         x=Zufallszahl(1,4);
  180.         switch(x){
  181.             case 4:{StartX=0;
  182.                             EndX=12;
  183.                             SizeX=1;
  184.                             StartY=0;
  185.                             EndY=12;
  186.                             SizeY=1;
  187.                             break;
  188.                             }
  189.             case 3:{StartX=0;
  190.                             EndX=12;
  191.                             SizeX=1;
  192.                             StartY=11;
  193.                             EndY=-1;
  194.                             SizeY=-1;
  195.                             break;
  196.                             }
  197.             case 2:{StartX=11;
  198.                             EndX=-1;
  199.                             SizeX=-1;
  200.                             StartY=0;
  201.                             EndY=12;
  202.                             SizeY=1;
  203.                             break;
  204.                             }
  205.             case 1:{StartX=11;
  206.                             EndX=-1;
  207.                             SizeX=-1;
  208.                             StartY=11;
  209.                             EndY=-1;
  210.                             SizeY=-1;
  211.                             break;
  212.                             }
  213.             }
  214.         for(y=StartY;(SizeY<0?y>EndY:y<EndY);y=y+SizeY){
  215.             for(x=StartX;(SizeX<0?x>EndX:x<EndX);x=x+SizeX){
  216.                 if((x!=1)&&(y!=5)){
  217.                     if((Matrix[x+12*y].Type==2)&&(CPUInSystem==FALSE)){
  218.                         Matrix[x+12*y].Type=1;
  219.                         CPUInSystem=TRUE;
  220.                         }
  221.                     }
  222.                 }
  223.             }
  224.         if(CPUInSystem==FALSE){
  225.             Matrix[1+12*5].Type=1;
  226.             CPUInSystem=TRUE;
  227.             }
  228.         }
  229.     while((zwsp==1)&&(CPUInSystem==FALSE)&&(AnzahlKnoten>0)){
  230.         x=Zufallszahl(1,4);
  231.         switch(x){
  232.             case 4:{StartX=0;
  233.                             EndX=12;
  234.                             SizeX=1;
  235.                             StartY=0;
  236.                             EndY=12;
  237.                             SizeY=1;
  238.                             break;
  239.                             }
  240.             case 3:{StartX=0;
  241.                             EndX=12;
  242.                             SizeX=1;
  243.                             StartY=11;
  244.                             EndY=-1;
  245.                             SizeY=-1;
  246.                             break;
  247.                             }
  248.             case 2:{StartX=11;
  249.                             EndX=-1;
  250.                             SizeX=-1;
  251.                             StartY=0;
  252.                             EndY=12;
  253.                             SizeY=1;
  254.                             break;
  255.                             }
  256.             case 1:{StartX=11;
  257.                             EndX=-1;
  258.                             SizeX=-1;
  259.                             StartY=11;
  260.                             EndY=-1;
  261.                             SizeY=-1;
  262.                             break;
  263.                             }
  264.             }
  265.         for(y=StartY;(SizeY<0?y>EndY:y<EndY);y=y+SizeY){
  266.             for(x=StartX;(SizeX<0?x>EndX:x<EndX);x=x+SizeX){
  267.                 if((Matrix[x+12*y].Type==2)&&(CPUInSystem==FALSE)){
  268.                     Matrix[x+12*y].Type=1;
  269.                     CPUInSystem=TRUE;
  270.                     }
  271.                 }
  272.             }
  273.         }
  274.     CountNodes();
  275.     BackStatus=FALSE;
  276.     while((AnzahlIOP==0)&&(BackStatus==FALSE)){
  277.         x=Zufallszahl(1,4);
  278.         switch(x){
  279.             case 4:{StartX=0;
  280.                             EndX=12;
  281.                             SizeX=1;
  282.                             StartY=0;
  283.                             EndY=12;
  284.                             SizeY=1;
  285.                             break;
  286.                             }
  287.             case 3:{StartX=0;
  288.                             EndX=12;
  289.                             SizeX=1;
  290.                             StartY=11;
  291.                             EndY=-1;
  292.                             SizeY=-1;
  293.                             break;
  294.                             }
  295.             case 2:{StartX=11;
  296.                             EndX=-1;
  297.                             SizeX=-1;
  298.                             StartY=0;
  299.                             EndY=12;
  300.                             SizeY=1;
  301.                             break;
  302.                             }
  303.             case 1:{StartX=11;
  304.                             EndX=-1;
  305.                             SizeX=-1;
  306.                             StartY=11;
  307.                             EndY=-1;
  308.                             SizeY=-1;
  309.                             break;
  310.                             }
  311.             }
  312.         for(y=StartY;(SizeY<0?y>EndY:y<EndY);y=y+SizeY){
  313.             for(x=StartX;(SizeX<0?x>EndX:x<EndX);x=x+SizeX){
  314.                 if((Matrix[x+12*y].Type==5)&&(BackStatus==FALSE)){
  315.                     Matrix[x+12*y].Type=3;
  316.                     BackStatus=TRUE;
  317.                     CountNodes();
  318.                     }
  319.                 if((Matrix[x+12*y].Type==6)&&(BackStatus==FALSE)){
  320.                     Matrix[x+12*y].Type=3;
  321.                     BackStatus=TRUE;
  322.                     CountNodes();
  323.                     }
  324.                 }
  325.             }
  326.         }
  327.     for(y=1;y<11;y++){
  328.         for(x=1;x<11;x++){
  329.             if((Matrix[x+12*y].N==TRUE)&&((Matrix[x+12*(y-1)].N==FALSE)&&(Matrix[x+12*(y-1)].Type==0))) Matrix[x+12*y].N=FALSE;
  330.             if((Matrix[x+12*y].NO==TRUE)&&((Matrix[x+1+12*(y-1)].NO==FALSE)&&(Matrix[x+1+12*(y-1)].Type==0))) Matrix[x+12*y].NO=FALSE;
  331.             if((Matrix[x+12*y].O==TRUE)&&((Matrix[x+1+12*y].O==FALSE)&&(Matrix[x+1+12*y].Type==0))) Matrix[x+12*y].O=FALSE;
  332.             if((Matrix[x+12*y].SO==TRUE)&&((Matrix[x+1+12*(y+1)].SO==FALSE)&&(Matrix[x+1+12*(y+1)].Type==0))) Matrix[x+12*y].SO=FALSE;
  333.             if((Matrix[x+12*y].S==TRUE)&&((Matrix[x+12*(y+1)].S==FALSE)&&(Matrix[x+12*(y+1)].Type==0))) Matrix[x+12*y].S=FALSE;
  334.             if((Matrix[x+12*y].SW==TRUE)&&((Matrix[x-1+12*(y+1)].SW==FALSE)&&(Matrix[x-1+12*(y+1)].Type==0))) Matrix[x+12*y].SW=FALSE;
  335.             if((Matrix[x+12*y].W==TRUE)&&((Matrix[x-1+12*y].W==FALSE)&&(Matrix[x-1+12*y].Type==0))) Matrix[x+12*y].W=FALSE;
  336.             if((Matrix[x+12*y].NW==TRUE)&&((Matrix[x-1+12*(y-1)].NW==FALSE)&&(Matrix[x-1+12*(y-1)].Type==0))) Matrix[x+12*y].NW=FALSE;
  337.             }
  338.         }
  339.     }
  340.  
  341. BOOL InsertNewNode(ULONG xw1,ULONG yw1,ULONG xw2,ULONG yw2){
  342. BOOL status;
  343. ULONG zwsp;
  344.     status=FALSE;
  345.     if(AnzahlKnoten>0){
  346.         switch(Matrix[xw2+12*yw2].Type){
  347.             case 1:{zwsp=Zufallszahl(1,6);
  348.                             if(((zwsp==1)||(zwsp==2)||(zwsp==3))&&(Zufallszahl(1,3)==1)){
  349.                                 Matrix[xw1+12*yw1].Type=2;
  350.                                 AnzahlKnotenSenken();
  351.                                 status=TRUE;
  352.                                 }
  353.                             if(((zwsp==4)||(zwsp==5))&&(Zufallszahl(1,3)==1)){
  354.                                 Matrix[xw1+12*yw1].Type=4;
  355.                                 AnzahlKnotenSenken();
  356.                                 status=TRUE;
  357.                                 }
  358.                             if((zwsp==5)&&(Zufallszahl(1,3)==1)){
  359.                                 switch(Zufallszahl(1,3)){
  360.                                     case 1:{Matrix[xw1+12*yw1].Type=3;
  361.                                                     AnzahlKnotenSenken();
  362.                                                     status=TRUE;
  363.                                                     break;
  364.                                                     }
  365.                                     case 2:{if(MaxSAN>0){
  366.                                                         Matrix[xw1+12*yw1].Type=5;
  367.                                                         AnzahlKnotenSenken();
  368.                                                         MaxSAN--;
  369.                                                         status=TRUE;
  370.                                                         }
  371.                                                     break;
  372.                                                     }
  373.                                     case 3:{Matrix[xw1+12*yw1].Type=6;
  374.                                                     AnzahlKnotenSenken();
  375.                                                     status=TRUE;
  376.                                                     break;
  377.                                                     }
  378.                                     }
  379.                                 }
  380.                             break;
  381.                             }
  382.             case 2:{zwsp=Zufallszahl(1,6);
  383.                             if(((zwsp==1)||(zwsp==2))&&(Zufallszahl(1,3)==1)){
  384.                                 Matrix[xw1+12*yw1].Type=2;
  385.                                 AnzahlKnotenSenken();
  386.                                 status=TRUE;
  387.                                 }
  388.                             if(((zwsp==3)||(zwsp==4))&&(Zufallszahl(1,3)==1)){
  389.                                 Matrix[xw1+12*yw1].Type=4;
  390.                                 AnzahlKnotenSenken();
  391.                                 status=TRUE;
  392.                                 }
  393.                             if(((zwsp==5)||(zwsp==6))&&(Zufallszahl(1,3)==1)){
  394.                                 switch(Zufallszahl(1,3)){
  395.                                     case 1:{Matrix[xw1+12*yw1].Type=3;
  396.                                                     AnzahlKnotenSenken();
  397.                                                     status=TRUE;
  398.                                                     break;
  399.                                                     }
  400.                                     case 2:{if(MaxSAN>0){
  401.                                                         Matrix[xw1+12*yw1].Type=5;
  402.                                                         AnzahlKnotenSenken();
  403.                                                         MaxSAN--;
  404.                                                         status=TRUE;
  405.                                                         }
  406.                                                     break;
  407.                                                     }
  408.                                     case 3:{Matrix[xw1+12*yw1].Type=6;
  409.                                                     AnzahlKnotenSenken();
  410.                                                     status=TRUE;
  411.                                                     break;
  412.                                                     }
  413.                                     }
  414.                                 }
  415.                             break;
  416.                             }
  417.             case 4:{zwsp=Zufallszahl(1,6);
  418.                             if(((zwsp==1)||(zwsp==2)||(zwsp==3)||(zwsp==4))&&(Zufallszahl(1,3)==1)){
  419.                                 Matrix[xw1+12*yw1].Type=2;
  420.                                 AnzahlKnotenSenken();
  421.                                 status=TRUE;
  422.                                 }
  423.                             if(((zwsp==5)||(zwsp==6))&&(Zufallszahl(1,3)==1)){
  424.                                 Matrix[xw1+12*yw1].Type=4;
  425.                                 AnzahlKnotenSenken();
  426.                                 status=TRUE;
  427.                                 }
  428.                             break;
  429.                             }
  430.             }
  431.         }
  432.     return status;
  433.     }
  434.  
  435. ULONG Editbar(ULONG xW,ULONG yW){
  436. ULONG Rueckwert;
  437.  
  438.     Rueckwert=0;
  439.     if(Matrix[xW+yW*12].Type==1) Rueckwert=1;
  440.     if(Matrix[xW+yW*12].Type==2) Rueckwert=2;
  441.     if(Matrix[xW+yW*12].Type==4) Rueckwert=4;
  442.     return Rueckwert;
  443.     }
  444.  
  445. void MatrixEditKanten(){
  446. LONG count;
  447. ULONG xWert,yWert;
  448.     count=(ULONG)((Zufallszahl(10,20)*log((double)AusgangsKnoten))/10);
  449.     while(count>0){
  450.         for(yWert=1;yWert<11;yWert++){
  451.             for(xWert=1;xWert<11;xWert++){
  452.                 if(Editbar(xWert,yWert)!=0){
  453.                     if(Editbar(xWert,yWert-1)){
  454.                         if(Zufallszahl(1,6)==1){
  455.                             Matrix[xWert+yWert*12].N=TRUE;
  456.                             Matrix[xWert+(yWert-1)*12].S=TRUE;
  457.                             }
  458.                         }
  459.                     if(Editbar(xWert+1,yWert-1)){
  460.                         if(Zufallszahl(1,6)==1){
  461.                             Matrix[xWert+yWert*12].NO=TRUE;
  462.                             Matrix[xWert+1+(yWert-1)*12].SW=TRUE;
  463.                             }
  464.                         }
  465.                     if(Editbar(xWert+1,yWert)){
  466.                         if(Zufallszahl(1,6)==1){
  467.                             Matrix[xWert+yWert*12].O=TRUE;
  468.                             Matrix[xWert+1+yWert*12].W=TRUE;
  469.                             }
  470.                         }
  471.                     if(Editbar(xWert+1,yWert+1)){
  472.                         if(Zufallszahl(1,6)==1){
  473.                             Matrix[xWert+yWert*12].SO=TRUE;
  474.                             Matrix[xWert+1+(yWert+1)*12].NW=TRUE;
  475.                             }
  476.                         }
  477.                     if(Editbar(xWert,yWert+1)){
  478.                         if(Zufallszahl(1,6)==1){
  479.                             Matrix[xWert+yWert*12].S=TRUE;
  480.                             Matrix[xWert+(yWert+1)*12].N=TRUE;
  481.                             }
  482.                         }
  483.                     if(Editbar(xWert-1,yWert+1)){
  484.                         if(Zufallszahl(1,6)==1){
  485.                             Matrix[xWert+yWert*12].SW=TRUE;
  486.                             Matrix[xWert-1+(yWert+1)*12].NO=TRUE;
  487.                             }
  488.                         }
  489.                     if(Editbar(xWert-1,yWert)){
  490.                         if(Zufallszahl(1,6)==1){
  491.                             Matrix[xWert+yWert*12].W=TRUE;
  492.                             Matrix[xWert-1+yWert*12].O=TRUE;
  493.                             }
  494.                         }
  495.                     if(Editbar(xWert-1,yWert-1)){
  496.                         if(Zufallszahl(1,6)==1){
  497.                             Matrix[xWert+yWert*12].NW=TRUE;
  498.                             Matrix[xWert-1+(yWert-1)*12].SO=TRUE;
  499.                             }
  500.                         }
  501.                     }
  502.                 count--;
  503.                 }
  504.             }
  505.         }
  506.     count=(ULONG)((Zufallszahl(10,20)*log((double)AusgangsKnoten))/10);
  507.     while(count>0){
  508.         for(yWert=2;yWert<10;yWert++){
  509.             for(xWert=2;xWert<10;xWert++){
  510.                 if(Editbar(xWert,yWert)!=0){
  511.                     if(Editbar(xWert,yWert-2)!=0){
  512.                         if(Matrix[xWert+12*(yWert-1)].Type==0){
  513.                             if(Zufallszahl(1,4)==1){
  514.                                 Matrix[xWert+yWert*12].N=TRUE;
  515.                                 Matrix[xWert+(yWert-1)*12].S=TRUE;
  516.                                 Matrix[xWert+(yWert-1)*12].N=TRUE;
  517.                                 Matrix[xWert+(yWert-2)*12].S=TRUE;
  518.                                 }
  519.                             }
  520.                         }
  521.                     if(Editbar(xWert+2,yWert-2)!=0){
  522.                         if(Matrix[xWert+1+12*(yWert-1)].Type==0){
  523.                             if(Zufallszahl(1,4)==1){
  524.                                 Matrix[xWert+yWert*12].NO=TRUE;
  525.                                 Matrix[xWert+1+(yWert-1)*12].SW=TRUE;
  526.                                 Matrix[xWert+1+(yWert-1)*12].NO=TRUE;
  527.                                 Matrix[xWert+2+(yWert-2)*12].SW=TRUE;
  528.                                 }
  529.                             }
  530.                         }
  531.                     if(Editbar(xWert+2,yWert)!=0){
  532.                         if(Matrix[xWert+1+12*yWert].Type==0){
  533.                             if(Zufallszahl(1,4)==1){
  534.                                 Matrix[xWert+yWert*12].O=TRUE;
  535.                                 Matrix[xWert+1+yWert*12].W=TRUE;
  536.                                 Matrix[xWert+1+yWert*12].O=TRUE;
  537.                                 Matrix[xWert+2+yWert*12].W=TRUE;
  538.                                 }
  539.                             }
  540.                         }
  541.                     if(Editbar(xWert+2,yWert+2)!=0){
  542.                         if(Matrix[xWert+1+12*(yWert+1)].Type==0){
  543.                             if(Zufallszahl(1,4)==1){
  544.                                 Matrix[xWert+yWert*12].SO=TRUE;
  545.                                 Matrix[xWert+1+(yWert+1)*12].NW=TRUE;
  546.                                 Matrix[xWert+1+(yWert+1)*12].SO=TRUE;
  547.                                 Matrix[xWert+2+(yWert+2)*12].NW=TRUE;
  548.                                 }
  549.                             }
  550.                         }
  551.                     if(Editbar(xWert,yWert+2)!=0){
  552.                         if(Matrix[xWert+12*(yWert+1)].Type==0){
  553.                             if(Zufallszahl(1,4)==1){
  554.                                 Matrix[xWert+yWert*12].S=TRUE;
  555.                                 Matrix[xWert+(yWert+1)*12].N=TRUE;
  556.                                 Matrix[xWert+(yWert+1)*12].S=TRUE;
  557.                                 Matrix[xWert+(yWert+2)*12].N=TRUE;
  558.                                 }
  559.                             }
  560.                         }
  561.                     if(Editbar(xWert-2,yWert+2)!=0){
  562.                         if(Matrix[xWert-1+12*(yWert+1)].Type==0){
  563.                             if(Zufallszahl(1,4)==1){
  564.                                 Matrix[xWert+yWert*12].SW=TRUE;
  565.                                 Matrix[xWert-1+(yWert+1)*12].NO=TRUE;
  566.                                 Matrix[xWert-1+(yWert+1)*12].SW=TRUE;
  567.                                 Matrix[xWert-2+(yWert+2)*12].NO=TRUE;
  568.                                 }
  569.                             }
  570.                         }
  571.                     if(Editbar(xWert-2,yWert)!=0){
  572.                         if(Matrix[xWert-1+12*yWert].Type==0){
  573.                             if(Zufallszahl(1,4)==1){
  574.                                 Matrix[xWert+yWert*12].W=TRUE;
  575.                                 Matrix[xWert-1+yWert*12].O=TRUE;
  576.                                 Matrix[xWert-1+yWert*12].W=TRUE;
  577.                                 Matrix[xWert-2+yWert*12].O=TRUE;
  578.                                 }
  579.                             }
  580.                         }
  581.                     if(Editbar(xWert-2,yWert-2)!=0){
  582.                         if(Matrix[xWert-1+12*(yWert-1)].Type==0){
  583.                             if(Zufallszahl(1,4)==1){
  584.                                 Matrix[xWert+yWert*12].NW=TRUE;
  585.                                 Matrix[xWert-1+(yWert-1)*12].SO=TRUE;
  586.                                 Matrix[xWert-1+(yWert-1)*12].NW=TRUE;
  587.                                 Matrix[xWert-2+(yWert-2)*12].SO=TRUE;
  588.                                 }
  589.                             }
  590.                         }
  591.                     }
  592.                 }
  593.             }
  594.         count--;
  595.         }
  596.     }
  597.  
  598. void MatrixStufe(){
  599. ULONG xx,yy;
  600.     if(Zufallsstufen==TRUE){
  601.         for(yy=0;yy<12;yy++){
  602.             for(xx=0;xx<12;xx++){
  603.                 if(Matrix[xx+12*yy].Type>0){
  604.                     Matrix[xx+12*yy].Secure=BerechneStufe();
  605.                     while((Matrix[xx+12*yy].Type==1)&&(Matrix[xx+12*yy].Secure==2)) Matrix[xx+12*yy].Secure=BerechneStufe();
  606.                     if(Matrix[xx+12*yy].Secure==2) while(Matrix[xx+12*yy].Stufe<2) Matrix[xx+12*yy].Stufe=Berechne1W6();
  607.                     if(Matrix[xx+12*yy].Secure==3) Matrix[xx+12*yy].Stufe=Berechne1W6()+1;
  608.                     if(Matrix[xx+12*yy].Secure==4) Matrix[xx+12*yy].Stufe=Berechne1W6()+2;
  609.                     if(Matrix[xx+12*yy].Secure==5) Matrix[xx+12*yy].Stufe=BerechneStufenwert()+BerechneStufenwert();
  610.                     if(Matrix[xx+12*yy].Secure==6) Matrix[xx+12*yy].Stufe=BerechneStufenwert()+BerechneStufenwert()+2;
  611.                     if(Matrix[xx+12*yy].Secure==7) Matrix[xx+12*yy].Stufe=BerechneStufenwert()+BerechneStufenwert()+4;
  612.                     }
  613.                 }
  614.             }
  615.         }
  616.     else{
  617.         for(yy=0;yy<12;yy++){
  618.             for(xx=0;xx<12;xx++){
  619.                 if(Matrix[xx+12*yy].Type>0){
  620.                     Matrix[xx+12*yy].Stufe=BerechneStufenwert();
  621.                     if((Zufallszahl(1,6)==1)&&(Matrix[xx+12*yy].Secure>2)){
  622.                         Matrix[xx+12*yy].Secure--;
  623.                         if((Matrix[xx+12*yy].Type==1)&&(Matrix[xx+12*yy].Secure==2)){
  624.                             Matrix[xx+12*yy].Secure++;
  625.                             }
  626.                         }
  627.                     if((Zufallszahl(1,6)==6)&&(Matrix[xx+12*yy].Secure<5)){
  628.                         Matrix[xx+12*yy].Secure++;
  629.                         if((Matrix[xx+12*yy].Type==1)&&(Matrix[xx+12*yy].Secure>MaxFarben)){
  630.                             Matrix[xx+12*yy].Secure=MaxFarben;
  631.                             }
  632.                         }
  633.                     }
  634.                 }
  635.             }
  636.         }
  637.     }
  638.  
  639. void MatrixDatenspeicher(){
  640. ULONG xx,yy,ergebnis,GrundWert,GrundSize;
  641.     if(KeineDatenspeicher==FALSE){
  642.         for(yy=0;yy<12;yy++){
  643.             for(xx=0;xx<12;xx++){
  644.                 if((Matrix[xx+12*yy].Type==4)&&(Matrix[xx+12*yy].Secure>2)){
  645.                     GrundWert=0;
  646.                     GrundSize=0;
  647.                     switch(Matrix[xx+12*yy].Secure){
  648.                         case 3:
  649.                                     ergebnis=Berechne2W6();
  650.                                     switch(ergebnis){
  651.                                         case 2:
  652.                                             GrundWert=0;
  653.                                             GrundSize=0;
  654.                                             break;
  655.                                         case 3:
  656.                                         case 4:
  657.                                             GrundWert=50;
  658.                                             GrundSize=Berechne2W6();
  659.                                             break;
  660.                                         case 5:
  661.                                         case 6:
  662.                                         case 7:
  663.                                             GrundWert=1000;
  664.                                             GrundSize=Berechne2W6();
  665.                                             break;
  666.                                         case 8:
  667.                                         case 9:
  668.                                         case 10:
  669.                                             GrundWert=5000;
  670.                                             GrundSize=Berechne2W6();
  671.                                             break;
  672.                                         case 11:
  673.                                             GrundWert=10000;
  674.                                             GrundSize=Berechne2W6();
  675.                                             break;
  676.                                         case 12:
  677.                                             GrundWert=0;
  678.                                             GrundSize=0;
  679.                                             break;
  680.                                         }
  681.                                     break;
  682.                         case 4:
  683.                                     ergebnis=Berechne2W6();
  684.                                     switch(ergebnis){
  685.                                         case 2:
  686.                                             GrundWert=0;
  687.                                             GrundSize=0;
  688.                                             break;
  689.                                         case 3:
  690.                                         case 4:
  691.                                             GrundWert=1000;
  692.                                             GrundSize=Berechne2W6();
  693.                                             break;
  694.                                         case 5:
  695.                                         case 6:
  696.                                         case 7:
  697.                                             GrundWert=2500;
  698.                                             GrundSize=Berechne2W6();
  699.                                             break;
  700.                                         case 8:
  701.                                         case 9:
  702.                                         case 10:
  703.                                             GrundWert=10000;
  704.                                             GrundSize=Berechne2W6();
  705.                                             break;
  706.                                         case 11:
  707.                                             GrundWert=50000;
  708.                                             GrundSize=Berechne2W6();
  709.                                             break;
  710.                                         case 12:
  711.                                             GrundWert=0;
  712.                                             GrundSize=0;
  713.                                             break;
  714.                                         }
  715.                                     break;
  716.                         case 5:
  717.                                     ergebnis=Berechne2W6();
  718.                                     switch(ergebnis){
  719.                                         case 2:
  720.                                             GrundWert=0;
  721.                                             GrundSize=0;
  722.                                             break;
  723.                                         case 3:
  724.                                         case 4:
  725.                                             GrundWert=2500;
  726.                                             GrundSize=Berechne2W6();
  727.                                             break;
  728.                                         case 5:
  729.                                         case 6:
  730.                                         case 7:
  731.                                             GrundWert=5000;
  732.                                             GrundSize=Berechne2W6();
  733.                                             break;
  734.                                         case 8:
  735.                                         case 9:
  736.                                         case 10:
  737.                                             GrundWert=50000;
  738.                                             GrundSize=Berechne2W6();
  739.                                             break;
  740.                                         case 11:
  741.                                             GrundWert=100000;
  742.                                             GrundSize=Berechne2W6();
  743.                                             break;
  744.                                         case 12:
  745.                                             GrundWert=0;
  746.                                             GrundSize=0;
  747.                                             break;
  748.                                         }
  749.                                     break;
  750.                         case 6:
  751.                                     ergebnis=Berechne2W6();
  752.                                     switch(ergebnis){
  753.                                         case 2:
  754.                                             GrundWert=0;
  755.                                             GrundSize=0;
  756.                                             break;
  757.                                         case 3:
  758.                                         case 4:
  759.                                             GrundWert=5000;
  760.                                             GrundSize=Berechne2W6();
  761.                                             break;
  762.                                         case 5:
  763.                                         case 6:
  764.                                         case 7:
  765.                                             GrundWert=25000;
  766.                                             GrundSize=Berechne2W6();
  767.                                             break;
  768.                                         case 8:
  769.                                         case 9:
  770.                                         case 10:
  771.                                             GrundWert=100000;
  772.                                             GrundSize=Berechne2W6();
  773.                                             break;
  774.                                         case 11:
  775.                                             GrundWert=200000;
  776.                                             GrundSize=Berechne2W6();
  777.                                             break;
  778.                                         case 12:
  779.                                             GrundWert=0;
  780.                                             GrundSize=0;
  781.                                             break;
  782.                                         }
  783.                                     break;
  784.                         case 7:
  785.                                     ergebnis=Berechne2W6();
  786.                                     switch(ergebnis){
  787.                                         case 2:
  788.                                             GrundWert=0;
  789.                                             GrundSize=0;
  790.                                             break;
  791.                                         case 3:
  792.                                         case 4:
  793.                                             GrundWert=25000;
  794.                                             GrundSize=Berechne2W6();
  795.                                             break;
  796.                                         case 5:
  797.                                         case 6:
  798.                                         case 7:
  799.                                             GrundWert=50000;
  800.                                             GrundSize=Berechne2W6();
  801.                                             break;
  802.                                         case 8:
  803.                                         case 9:
  804.                                         case 10:
  805.                                             GrundWert=200000;
  806.                                             GrundSize=Berechne2W6();
  807.                                             break;
  808.                                         case 11:
  809.                                             GrundWert=500000;
  810.                                             GrundSize=Berechne2W6();
  811.                                             break;
  812.                                         case 12:
  813.                                             GrundWert=0;
  814.                                             GrundSize=0;
  815.                                             break;
  816.                                         }
  817.                                     break;
  818.                         }
  819.                     if(RandomDSValue==TRUE) Matrix[xx+12*yy].Datenwert=((GrundWert/10)*Zufallszahl(900,1100))/100;
  820.                     else Matrix[xx+12*yy].Datenwert=GrundWert;
  821.                     if((RandomDSValue==TRUE)&&(GrundWert>0)){
  822.                         Matrix[xx+12*yy].Datensize=GrundSize*10+Zufallszahl(0,10)-5;
  823.                         if(Matrix[xx+12*yy].Datensize<0) Matrix[xx+12*yy].Datensize=1;
  824.                         }
  825.                     else Matrix[xx+12*yy].Datensize=GrundSize*10;
  826.                     }
  827.                 }
  828.             }
  829.         }
  830.     CountNodes();
  831.     CountBlueDS();
  832.     while((AnzahlWichtigeDaten>0)&&(AnzahlWichtigeDaten>(AusgangsWichtigeDaten-(AnzahlDS-AnzahlBlueNodes)))){
  833.         for(yy=0;yy<12;yy++){
  834.             for(xx=0;xx<12;xx++){
  835.                 if((Matrix[xx+12*yy].Type==4)&&(AnzahlWichtigeDaten>0)&&(Matrix[xx+12*yy].WichtigeDaten==FALSE)){
  836.                     if((Zufallszahl(1,15)>10)&&(Matrix[xx+12*yy].Secure>2)){
  837.                         Matrix[xx+12*yy].WichtigeDaten=TRUE;
  838.                         AnzahlWichtigeDaten--;
  839.                         }
  840.                     }
  841.                 }
  842.             }
  843.         }
  844.     }
  845.  
  846. void MatrixNummerierung(){
  847. ULONG x1,y1,Korrekt;
  848. BOOL MakePrint;
  849. char AusText[10];
  850.     for(y1=0;y1<12;y1++){
  851.         for(x1=0;x1<12;x1++){
  852.             MakePrint=FALSE;
  853.             switch(Matrix[x1+y1*12].Type){
  854.                 case 2:{sprintf(AusText,"%i",Matrix[x1+12*y1].Nummer);
  855.                                 MakePrint=TRUE;
  856.                                 Korrekt=0;
  857.                                 if(Matrix[x1+12*y1].ICType>0) Korrekt=2;
  858.                                 break;
  859.                                 }
  860.                 case 3:{sprintf(AusText,"%i",Matrix[x1+12*y1].Nummer);
  861.                                 MakePrint=TRUE;
  862.                                 Korrekt=4;
  863.                                 break;
  864.                                 }
  865.                 case 4:{sprintf(AusText,"%i",Matrix[x1+12*y1].Nummer);
  866.                                 MakePrint=TRUE;
  867.                                 Korrekt=0;
  868.                                 if(Matrix[x1+12*y1].ICType>0) Korrekt=2;
  869.                                 break;
  870.                                 }
  871.                 case 5:{sprintf(AusText,"%i",Matrix[x1+12*y1].Nummer);
  872.                                 MakePrint=TRUE;
  873.                                 Korrekt=0;
  874.                                 if(Matrix[x1+12*y1].ICType>0) Korrekt=0;
  875.                                 break;
  876.                                 }
  877.                 case 6:{sprintf(AusText,"%i",Matrix[x1+12*y1].Nummer);
  878.                                 MakePrint=TRUE;
  879.                                 Korrekt=0;
  880.                                 if(Matrix[x1+12*y1].ICType>0) Korrekt=2;
  881.                                 break;
  882.                                 }
  883.                 }
  884.             if(MakePrint==TRUE) AusgabeText(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+Korrekt,1,AusText);
  885.             }
  886.         }
  887.     }
  888.  
  889. void MatrixDarstellung(){
  890. ULONG x1,y1;
  891.     for(y1=0;y1<12;y1++){
  892.         for(x1=0;x1<12;x1++){
  893.             switch(Matrix[x1+y1*12].Type){
  894.                 case 1:{DrawCPU(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  895.                                 break;
  896.                                 }
  897.                 case 2:{DrawSPU(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  898.                                 break;
  899.                                 }
  900.                 case 3:{DrawIOP(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  901.                                 break;
  902.                                 }
  903.                 case 4:{DrawDS(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  904.                                 break;
  905.                                 }
  906.                 case 5:{DrawSAN(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  907.                                 break;
  908.                                 }
  909.                 case 6:{DrawSN(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset,Matrix[x1+y1*12].Secure);
  910.                                 break;
  911.                                 }
  912.                 }
  913.             }
  914.         }
  915.     for(y1=0;y1<12;y1++){
  916.         for(x1=0;x1<12;x1++){
  917.             if((Matrix[x1+y1*12].N==TRUE)&&(y1>0)){
  918.                 if(((Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==6)||(Matrix[x1+y1*12].Type==3)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1+(y1-1)*12].Type==2)||(Matrix[x1+(y1-1)*12].Type==4)||(Matrix[x1+(y1-1)*12].Type==3)||(Matrix[x1+(y1-1)*12].Type==6)||(Matrix[x1+(y1-1)*12].Type==1))){
  919.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-11,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset+11);
  920.                     }
  921.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1+(y1-1)*12].Type==2)||(Matrix[x1+(y1-1)*12].Type==4)||(Matrix[x1+(y1-1)*12].Type==1))){
  922.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-6,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset+11);
  923.                     }
  924.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+(y1-1)*12].Type==5)){
  925.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-11,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset+6);
  926.                     }
  927. /*Leer*/
  928.                 if(((Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==6)||(Matrix[x1+y1*12].Type==3)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+(y1-1)*12].Type==0)){
  929.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-11,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  930.                     }
  931.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1+(y1-1)*12].Type==0)){
  932.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-6,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  933.                     }
  934.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+(y1-1)*12].Type==0)){
  935.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset-11,x1*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  936.                     }
  937.                 }
  938.             if((Matrix[x1+y1*12].NO==TRUE)&&(x1<11)&&(y1>0)){
  939.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1+1+(y1-1)*12].Type==2)||(Matrix[x1+1+(y1-1)*12].Type==1))){
  940.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-12,(y1-1)*yVerschiebung+yOffset+9);
  941.                     }
  942.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+(y1-1)*12].Type==4)){
  943.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-11,(y1-1)*yVerschiebung+yOffset+9);
  944.                     }
  945.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1+1+(y1-1)*12].Type==1)||(Matrix[x1+1+(y1-1)*12].Type==2))){
  946.                     DrawLinie(x1*xVerschiebung+xOffset+6,y1*yVerschiebung+yOffset-5,(x1+1)*xVerschiebung+xOffset-12,(y1-1)*yVerschiebung+yOffset+9);
  947.                     }
  948.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1+1+(y1-1)*12].Type==1)||(Matrix[x1+1+(y1-1)*12].Type==2))){
  949.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-12,(y1-1)*yVerschiebung+yOffset+9);
  950.                     }
  951.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1+1+(y1-1)*12].Type==2)||(Matrix[x1+1+(y1-1)*12].Type==1))){
  952.                     DrawLinie(x1*xVerschiebung+xOffset+10,y1*yVerschiebung+yOffset-6,(x1+1)*xVerschiebung+xOffset-12,(y1-1)*yVerschiebung+yOffset+9);
  953.                     }
  954.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1+1+(y1-1)*12].Type==1)||(Matrix[x1+1+(y1-1)*12].Type==2))){
  955.                     DrawLinie(x1*xVerschiebung+xOffset+9,y1*yVerschiebung+yOffset-7,(x1+1)*xVerschiebung+xOffset-12,(y1-1)*yVerschiebung+yOffset+9);
  956.                     }
  957.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==3)){
  958.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-13,(y1-1)*yVerschiebung+yOffset+11);
  959.                     }
  960.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==4)){
  961.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-11,(y1-1)*yVerschiebung+yOffset+9);
  962.                     }
  963.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==5)){
  964.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-10,(y1-1)*yVerschiebung+yOffset+6);
  965.                     }
  966.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==6)){
  967.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset-9,(y1-1)*yVerschiebung+yOffset+7);
  968.                     }
  969. /*Leer*/
  970.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  971.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  972.                     }
  973.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  974.                     DrawLinie(x1*xVerschiebung+xOffset+6,y1*yVerschiebung+yOffset-5,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  975.                     }
  976.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  977.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  978.                     }
  979.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  980.                     DrawLinie(x1*xVerschiebung+xOffset+10,y1*yVerschiebung+yOffset-6,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  981.                     }
  982.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  983.                     DrawLinie(x1*xVerschiebung+xOffset+9,y1*yVerschiebung+yOffset-7,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  984.                     }
  985.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1-1)*12].Type==0)){
  986.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset-9,(x1+1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  987.                     }
  988.                 }
  989.             if((Matrix[x1+y1*12].O==TRUE)&&(x1<11)){
  990.                 if(((Matrix[x1+y1*12].Type==5)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1+1+y1*12].Type==2)||(Matrix[x1+1+y1*12].Type==5)||(Matrix[x1+1+y1*12].Type==1))){
  991.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset);
  992.                     }
  993.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+y1*12].Type==4)){
  994.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset);
  995.                     }
  996.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1+1+y1*12].Type==1)||(Matrix[x1+1+y1*12].Type==2))){
  997.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset);
  998.                     }
  999.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1+1+y1*12].Type==1)||(Matrix[x1+1+y1*12].Type==2))){
  1000.                     DrawLinie(x1*xVerschiebung+xOffset+8,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset);
  1001.                     }
  1002.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1+1+y1*12].Type==1)||(Matrix[x1+1+y1*12].Type==2))){
  1003.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset);
  1004.                     }
  1005.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+y1*12].Type==4)){
  1006.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset);
  1007.                     }
  1008.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+y1*12].Type==3)){
  1009.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-8,y1*yVerschiebung+yOffset);
  1010.                     }
  1011.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+y1*12].Type==6)){
  1012.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset);
  1013.                     }
  1014. /*Leer*/
  1015.                 if(((Matrix[x1+y1*12].Type==5)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+y1*12].Type==0)){
  1016.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1017.                     }
  1018.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+y1*12].Type==0)){
  1019.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1020.                     }
  1021.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1+1+y1*12].Type==0)){
  1022.                     DrawLinie(x1*xVerschiebung+xOffset+8,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1023.                     }
  1024.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1+1+y1*12].Type==0)){
  1025.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1026.                     }
  1027.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+y1*12].Type==0)){
  1028.                     DrawLinie(x1*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset,(x1+1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1029.                     }
  1030.                 }
  1031.             if((Matrix[x1+y1*12].SO==TRUE)&&(y1<11)&&(x1<11)){
  1032.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1+1+(y1+1)*12].Type==2)||(Matrix[x1+1+(y1+1)*12].Type==1))){
  1033.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-12,(y1+1)*yVerschiebung+yOffset-9);
  1034.                     }
  1035.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+(y1+1)*12].Type==4)){
  1036.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-11,(y1+1)*yVerschiebung+yOffset-9);
  1037.                     }
  1038.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1+1+(y1+1)*12].Type==1)||(Matrix[x1+1+(y1+1)*12].Type==2))){
  1039.                     DrawLinie(x1*xVerschiebung+xOffset+13,y1*yVerschiebung+yOffset+11,(x1+1)*xVerschiebung+xOffset-12,(y1+1)*yVerschiebung+yOffset-9);
  1040.                     }
  1041.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1+1+(y1+1)*12].Type==1)||(Matrix[x1+1+(y1+1)*12].Type==2))){
  1042.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-12,(y1+1)*yVerschiebung+yOffset-9);
  1043.                     }
  1044.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1+1+(y1+1)*12].Type==2)||(Matrix[x1+1+(y1+1)*12].Type==1))){
  1045.                     DrawLinie(x1*xVerschiebung+xOffset+10,y1*yVerschiebung+yOffset+6,(x1+1)*xVerschiebung+xOffset-12,(y1+1)*yVerschiebung+yOffset-9);
  1046.                     }
  1047.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1+1+(y1+1)*12].Type==1)||(Matrix[x1+1+(y1+1)*12].Type==2))){
  1048.                     DrawLinie(x1*xVerschiebung+xOffset+9,y1*yVerschiebung+yOffset+7,(x1+1)*xVerschiebung+xOffset-12,(y1+1)*yVerschiebung+yOffset-9);
  1049.                     }
  1050.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1+1)*12].Type==3)){
  1051.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-6,(y1+1)*yVerschiebung+yOffset-4);
  1052.                     }
  1053.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1+1)*12].Type==4)){
  1054.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-11,(y1+1)*yVerschiebung+yOffset-9);
  1055.                     }
  1056.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1+1)*12].Type==5)){
  1057.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-10,(y1+1)*yVerschiebung+yOffset-6);
  1058.                     }
  1059.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1+1)*12].Type==6)){
  1060.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset-9,(y1+1)*yVerschiebung+yOffset-7);
  1061.                     }
  1062. /*Leer*/
  1063.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+1+(y1+1)*12].Type==0)){
  1064.                     DrawLinie(x1*xVerschiebung+xOffset+12,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1065.                     }
  1066.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1+1+(y1+1)*12].Type==0)){
  1067.                     DrawLinie(x1*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset+9,(x1+1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1068.                     }
  1069.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1+1+(y1+1)*12].Type==0)){
  1070.                     DrawLinie(x1*xVerschiebung+xOffset+13,y1*yVerschiebung+yOffset+11,(x1+1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1071.                     }
  1072.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1+1+(y1+1)*12].Type==0)){
  1073.                     DrawLinie(x1*xVerschiebung+xOffset+10,y1*yVerschiebung+yOffset+6,(x1+1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1074.                     }
  1075.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1+1+(y1+1)*12].Type==0)){
  1076.                     DrawLinie(x1*xVerschiebung+xOffset+9,y1*yVerschiebung+yOffset+7,(x1+1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1077.                     }
  1078.                 }
  1079.             if((Matrix[x1+y1*12].S==TRUE)&&(y1<11)){
  1080.                 if(((Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==6)||(Matrix[x1+y1*12].Type==3)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1+(y1+1)*12].Type==2)||(Matrix[x1+(y1+1)*12].Type==4)||(Matrix[x1+(y1+1)*12].Type==1)||(Matrix[x1+(y1+1)*12].Type==6)||(Matrix[x1+(y1+1)*12].Type==3))){
  1081.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+11,x1*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset-11);
  1082.                     }
  1083.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1+(y1-1)*12].Type==2)||(Matrix[x1+(y1-1)*12].Type==4)||(Matrix[x1+(y1+1)*12].Type==1))){
  1084.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+6,x1*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset-11);
  1085.                     }
  1086.                 if(((Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+(y1+1)*12].Type==5)){
  1087.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+11,x1*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset-6);
  1088.                     }
  1089. /*Leer*/
  1090.                 if(((Matrix[x1+y1*12].Type==4)||(Matrix[x1+y1*12].Type==6)||(Matrix[x1+y1*12].Type==3)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1+(y1+1)*12].Type==0)){
  1091.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+11,x1*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1092.                     }
  1093.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1+(y1+1)*12].Type==0)){
  1094.                     DrawLinie(x1*xVerschiebung+xOffset,y1*yVerschiebung+yOffset+6,x1*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1095.                     }
  1096.                 }
  1097.             if((Matrix[x1+y1*12].SW==TRUE)&&(x1>0)&&(y1<11)){
  1098.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1-1+(y1+1)*12].Type==2)||(Matrix[x1-1+(y1+1)*12].Type==1))){
  1099.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+12,(y1+1)*yVerschiebung+yOffset-9);
  1100.                     }
  1101.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+(y1+1)*12].Type==4)){
  1102.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+11,(y1+1)*yVerschiebung+yOffset-9);
  1103.                     }
  1104.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1-1+(y1+1)*12].Type==1)||(Matrix[x1-1+(y1+1)*12].Type==2))){
  1105.                     DrawLinie(x1*xVerschiebung+xOffset-13,y1*yVerschiebung+yOffset+11,(x1-1)*xVerschiebung+xOffset+12,(y1+1)*yVerschiebung+yOffset-9);
  1106.                     }
  1107.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1-1+(y1+1)*12].Type==1)||(Matrix[x1-1+(y1+1)*12].Type==2))){
  1108.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+12,(y1+1)*yVerschiebung+yOffset-9);
  1109.                     }
  1110.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1-1+(y1+1)*12].Type==2)||(Matrix[x1-1+(y1+1)*12].Type==1))){
  1111.                     DrawLinie(x1*xVerschiebung+xOffset-10,y1*yVerschiebung+yOffset+6,(x1-1)*xVerschiebung+xOffset+12,(y1+1)*yVerschiebung+yOffset-9);
  1112.                     }
  1113.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1-1+(y1+1)*12].Type==1)||(Matrix[x1-1+(y1+1)*12].Type==2))){
  1114.                     DrawLinie(x1*xVerschiebung+xOffset-9,y1*yVerschiebung+yOffset+7,(x1-1)*xVerschiebung+xOffset+12,(y1+1)*yVerschiebung+yOffset-9);
  1115.                     }
  1116.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1+1)*12].Type==3)){
  1117.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+6,(y1+1)*yVerschiebung+yOffset-5);
  1118.                     }
  1119.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1+1)*12].Type==4)){
  1120.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+11,(y1+1)*yVerschiebung+yOffset-9);
  1121.                     }
  1122.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1+1)*12].Type==5)){
  1123.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+10,(y1+1)*yVerschiebung+yOffset-6);
  1124.                     }
  1125.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1+1)*12].Type==6)){
  1126.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset+9,(y1+1)*yVerschiebung+yOffset-7);
  1127.                     }
  1128. /*Leer*/
  1129.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1+1)*12].Type==0)){
  1130.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1131.                     }
  1132.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1-1+(y1+1)*12].Type==0)){
  1133.                     DrawLinie(x1*xVerschiebung+xOffset-13,y1*yVerschiebung+yOffset+11,(x1-1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1134.                     }
  1135.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+(y1+1)*12].Type==0)){
  1136.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset+9,(x1-1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1137.                     }
  1138.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1-1+(y1+1)*12].Type==0)){
  1139.                     DrawLinie(x1*xVerschiebung+xOffset-10,y1*yVerschiebung+yOffset+6,(x1-1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1140.                     }
  1141.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1-1+(y1+1)*12].Type==0)){
  1142.                     DrawLinie(x1*xVerschiebung+xOffset-9,y1*yVerschiebung+yOffset+7,(x1-1)*xVerschiebung+xOffset,(y1+1)*yVerschiebung+yOffset);
  1143.                     }
  1144.                 }
  1145.             if((Matrix[x1+y1*12].W==TRUE)&&(x1>0)){
  1146.                 if(((Matrix[x1+y1*12].Type==5)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1-1+y1*12].Type==2)||(Matrix[x1-1+y1*12].Type==5)||(Matrix[x1-1+y1*12].Type==1))){
  1147.                     DrawLinie(x1*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset);
  1148.                     }
  1149.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+y1*12].Type==4)){
  1150.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset);
  1151.                     }
  1152.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1-1+y1*12].Type==1)||(Matrix[x1-1+y1*12].Type==2))){
  1153.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset);
  1154.                     }
  1155.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1-1+y1*12].Type==1)||(Matrix[x1-1+y1*12].Type==2))){
  1156.                     DrawLinie(x1*xVerschiebung+xOffset-8,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset);
  1157.                     }
  1158.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1-1+y1*12].Type==1)||(Matrix[x1-1+y1*12].Type==2))){
  1159.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+16,y1*yVerschiebung+yOffset);
  1160.                     }
  1161.                 if(((Matrix[x1+y1*12].Type==1)||(Matrix[x1+y1*12].Type==2))&&(Matrix[x1-1+y1*12].Type==4)){
  1162.                     DrawLinie(x1*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset);
  1163.                     }
  1164.                 if(((Matrix[x1+y1*12].Type==1)||(Matrix[x1+y1*12].Type==2))&&(Matrix[x1-1+y1*12].Type==3)){
  1165.                     DrawLinie(x1*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+8,y1*yVerschiebung+yOffset);
  1166.                     }
  1167.                 if(((Matrix[x1+y1*12].Type==1)||(Matrix[x1+y1*12].Type==2))&&(Matrix[x1-1+y1*12].Type==6)){
  1168.                     DrawLinie(x1*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset+11,y1*yVerschiebung+yOffset);
  1169.                     }
  1170. /*Leer*/
  1171.                 if(((Matrix[x1+y1*12].Type==5)||(Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+y1*12].Type==0)){
  1172.                     DrawLinie(x1*xVerschiebung+xOffset-16,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1173.                     }
  1174.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+y1*12].Type==0)){
  1175.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1176.                     }
  1177.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1-1+y1*12].Type==0)){
  1178.                     DrawLinie(x1*xVerschiebung+xOffset-8,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1179.                     }
  1180.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1-1+y1*12].Type==0)){
  1181.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset,(x1-1)*xVerschiebung+xOffset,y1*yVerschiebung+yOffset);
  1182.                     }
  1183.                 }
  1184.             if((Matrix[x1+y1*12].NW==TRUE)&&(x1>0)&&(y1>0)){
  1185.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&((Matrix[x1-1+(y1-1)*12].Type==2)||(Matrix[x1-1+(y1-1)*12].Type==1))){
  1186.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+12,(y1-1)*yVerschiebung+yOffset+9);
  1187.                     }
  1188.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+(y1-1)*12].Type==4)){
  1189.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+11,(y1-1)*yVerschiebung+yOffset+9);
  1190.                     }
  1191.                 if((Matrix[x1+y1*12].Type==3)&&((Matrix[x1-1+(y1-1)*12].Type==1)||(Matrix[x1-1+(y1-1)*12].Type==2))){
  1192.                     DrawLinie(x1*xVerschiebung+xOffset-6,y1*yVerschiebung+yOffset-4,(x1-1)*xVerschiebung+xOffset+12,(y1-1)*yVerschiebung+yOffset+9);
  1193.                     }
  1194.                 if((Matrix[x1+y1*12].Type==4)&&((Matrix[x1-1+(y1-1)*12].Type==1)||(Matrix[x1-1+(y1-1)*12].Type==2))){
  1195.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+12,(y1-1)*yVerschiebung+yOffset+9);
  1196.                     }
  1197.                 if((Matrix[x1+y1*12].Type==5)&&((Matrix[x1-1+(y1-1)*12].Type==2)||(Matrix[x1-1+(y1-1)*12].Type==1))){
  1198.                     DrawLinie(x1*xVerschiebung+xOffset-10,y1*yVerschiebung+yOffset-6,(x1-1)*xVerschiebung+xOffset+12,(y1-1)*yVerschiebung+yOffset+9);
  1199.                     }
  1200.                 if((Matrix[x1+y1*12].Type==6)&&((Matrix[x1-1+(y1-1)*12].Type==1)||(Matrix[x1-1+(y1-1)*12].Type==2))){
  1201.                     DrawLinie(x1*xVerschiebung+xOffset-9,y1*yVerschiebung+yOffset-7,(x1-1)*xVerschiebung+xOffset+12,(y1-1)*yVerschiebung+yOffset+9);
  1202.                     }
  1203.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1-1)*12].Type==3)){
  1204.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+13,(y1-1)*yVerschiebung+yOffset+11);
  1205.                     }
  1206.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1-1)*12].Type==4)){
  1207.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+11,(y1-1)*yVerschiebung+yOffset+9);
  1208.                     }
  1209.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1-1)*12].Type==5)){
  1210.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+10,(y1-1)*yVerschiebung+yOffset+6);
  1211.                     }
  1212.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1-1)*12].Type==6)){
  1213.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset+9,(y1-1)*yVerschiebung+yOffset+7);
  1214.                     }
  1215. /*Leer*/
  1216.                 if(((Matrix[x1+y1*12].Type==2)||(Matrix[x1+y1*12].Type==1))&&(Matrix[x1-1+(y1-1)*12].Type==0)){
  1217.                     DrawLinie(x1*xVerschiebung+xOffset-12,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  1218.                     }
  1219.                 if((Matrix[x1+y1*12].Type==3)&&(Matrix[x1-1+(y1-1)*12].Type==0)){
  1220.                     DrawLinie(x1*xVerschiebung+xOffset-6,y1*yVerschiebung+yOffset-4,(x1-1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  1221.                     }
  1222.                 if((Matrix[x1+y1*12].Type==4)&&(Matrix[x1-1+(y1-1)*12].Type==0)){
  1223.                     DrawLinie(x1*xVerschiebung+xOffset-11,y1*yVerschiebung+yOffset-9,(x1-1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  1224.                     }
  1225.                 if((Matrix[x1+y1*12].Type==5)&&(Matrix[x1-1+(y1-1)*12].Type==0)){
  1226.                     DrawLinie(x1*xVerschiebung+xOffset-10,y1*yVerschiebung+yOffset-6,(x1-1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  1227.                     }
  1228.                 if((Matrix[x1+y1*12].Type==6)&&(Matrix[x1-1+(y1-1)*12].Type==0)){
  1229.                     DrawLinie(x1*xVerschiebung+xOffset-9,y1*yVerschiebung+yOffset-7,(x1-1)*xVerschiebung+xOffset,(y1-1)*yVerschiebung+yOffset);
  1230.                     }
  1231.                 }
  1232.             }
  1233.         }
  1234.     for(y1=0;y1<12;y1++){
  1235.         for(x1=0;x1<12;x1++){
  1236.             if(Matrix[x1+12*y1].ICType>0){
  1237.                 if(Matrix[x1+12*y1].Type==1) DrawIC(x1*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset+3);
  1238.                 if(Matrix[x1+12*y1].Type==2) DrawIC(x1*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset-2);
  1239.                 if(Matrix[x1+12*y1].Type==3) DrawIC(x1*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset);
  1240.                 if(Matrix[x1+12*y1].Type==4) DrawIC(x1*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset-2);
  1241.                 if(Matrix[x1+12*y1].Type==5) DrawIC(x1*xVerschiebung+xOffset+7,y1*yVerschiebung+yOffset+3);
  1242.                 if(Matrix[x1+12*y1].Type==6) DrawIC(x1*xVerschiebung+xOffset+15,y1*yVerschiebung+yOffset-2);
  1243.                 }
  1244.             }
  1245.         }
  1246.     }
  1247.  
  1248. void MatrixInstallIC(){
  1249. ULONG xx,yy,TestWert;
  1250. BOOL ICInstallen;
  1251.     if(InstallNoIC==FALSE){
  1252.         for(yy=0;yy<12;yy++){
  1253.             for(xx=0;xx<12;xx++){
  1254.                 if(Matrix[xx+12*yy].Type>0){
  1255.                     ICInstallen=FALSE;
  1256.                     TestWert=Zufallszahl(1,6);
  1257.                     if((Matrix[xx+12*yy].Secure==3)&&((TestWert==1)||((AlwaysICDS==TRUE)&&(Matrix[xx+12*yy].Type==4)))) ICInstallen=TRUE;
  1258.                     if((Matrix[xx+12*yy].Secure==4)&&((TestWert>=1)&&(TestWert<=2))||((AlwaysICDS==TRUE)&&(Matrix[xx+12*yy].Type==4))) ICInstallen=TRUE;
  1259.                     if((Matrix[xx+12*yy].Secure==5)&&((TestWert>=1)&&(TestWert<=3))||((AlwaysICDS==TRUE)&&(Matrix[xx+12*yy].Type==4))) ICInstallen=TRUE;
  1260.                     if((Matrix[xx+12*yy].Secure==6)&&((TestWert>=1)&&(TestWert<=4))||((AlwaysICDS==TRUE)&&(Matrix[xx+12*yy].Type==4))) ICInstallen=TRUE;
  1261.                     if((Matrix[xx+12*yy].Secure==7)&&((TestWert>=1)&&(TestWert<=5))||((AlwaysICDS==TRUE)&&(Matrix[xx+12*yy].Type==4))) ICInstallen=TRUE;
  1262.                     if(ICInstallen==TRUE){
  1263.                         ICInstallen=FALSE;
  1264.                         TestWert=Zufallszahl(1,6)+Zufallszahl(1,6);
  1265.                         if((Matrix[xx+12*yy].Secure==3)&&(TestWert>=2)&&(TestWert<=8)) Matrix[xx+12*yy].ICType=1;        /* weiss */
  1266.                         if((Matrix[xx+12*yy].Secure==3)&&(TestWert>=9)&&(TestWert<=11)) Matrix[xx+12*yy].ICType=2;    /* grau */
  1267.                         if((Matrix[xx+12*yy].Secure==3)&&(TestWert>=12)&&(TestWert<=12)) Matrix[xx+12*yy].ICType=3;    /* schwarz */
  1268.                         if((Matrix[xx+12*yy].Secure==4)&&(TestWert>=2)&&(TestWert<=7)) Matrix[xx+12*yy].ICType=1;        /* weiss */
  1269.                         if((Matrix[xx+12*yy].Secure==4)&&(TestWert>=8)&&(TestWert<=10)) Matrix[xx+12*yy].ICType=2;    /* grau */
  1270.                         if((Matrix[xx+12*yy].Secure==4)&&(TestWert>=11)&&(TestWert<=12)) Matrix[xx+12*yy].ICType=3;    /* schwarz */
  1271.                         if((Matrix[xx+12*yy].Secure==5)&&(TestWert>=2)&&(TestWert<=6)) Matrix[xx+12*yy].ICType=1;        /* weiss */
  1272.                         if((Matrix[xx+12*yy].Secure==5)&&(TestWert>=6)&&(TestWert<=10)) Matrix[xx+12*yy].ICType=2;    /* grau */
  1273.                         if((Matrix[xx+12*yy].Secure==5)&&(TestWert>=11)&&(TestWert<=12)) Matrix[xx+12*yy].ICType=3;    /* schwarz */
  1274.                         if((Matrix[xx+12*yy].Secure==6)&&(TestWert>=2)&&(TestWert<=5)) Matrix[xx+12*yy].ICType=1;        /* weiss */
  1275.                         if((Matrix[xx+12*yy].Secure==6)&&(TestWert>=5)&&(TestWert<=9)) Matrix[xx+12*yy].ICType=2;        /* grau */
  1276.                         if((Matrix[xx+12*yy].Secure==6)&&(TestWert>=10)&&(TestWert<=12)) Matrix[xx+12*yy].ICType=3;    /* schwarz */
  1277.                         if((Matrix[xx+12*yy].Secure==7)&&(TestWert>=2)&&(TestWert<=4)) Matrix[xx+12*yy].ICType=1;        /* weiss */
  1278.                         if((Matrix[xx+12*yy].Secure==7)&&(TestWert>=4)&&(TestWert<=9)) Matrix[xx+12*yy].ICType=2;        /* grau */
  1279.                         if((Matrix[xx+12*yy].Secure==7)&&(TestWert>=10)&&(TestWert<=12)) Matrix[xx+12*yy].ICType=3;    /* schwarz */
  1280.                         TestWert=Zufallszahl(1,6)+Zufallszahl(1,6);
  1281.                         if((Matrix[xx+12*yy].ICType==1)&&(TestWert>=2)&&(TestWert<=2)) Matrix[xx+12*yy].ICArt=1;        /* Falle */
  1282.                         if((Matrix[xx+12*yy].ICType==1)&&(TestWert>=3)&&(TestWert<=7)) Matrix[xx+12*yy].ICArt=2;        /* Zugang */
  1283.                         if((Matrix[xx+12*yy].ICType==1)&&(TestWert>=8)&&(TestWert<=11)) Matrix[xx+12*yy].ICArt=3;        /* BarriereIC/WirbelIC */
  1284.                         if((Matrix[xx+12*yy].ICType==1)&&(TestWert>=12)&&(TestWert<=12)) Matrix[xx+12*yy].ICArt=4;    /* Falle */
  1285.                         if((Matrix[xx+12*yy].ICType==2)&&(TestWert>=2)&&(TestWert<=4)) Matrix[xx+12*yy].ICArt=1;        /* Blaster */
  1286.                         if((Matrix[xx+12*yy].ICType==2)&&(TestWert>=5)&&(TestWert<=6)) Matrix[xx+12*yy].ICArt=2;        /* Aufspüren */
  1287.                         if((Matrix[xx+12*yy].ICType==2)&&(TestWert>=7)&&(TestWert<=8)) Matrix[xx+12*yy].ICArt=3;        /* Killer */
  1288.                         if((Matrix[xx+12*yy].ICType==2)&&(TestWert>=9)&&(TestWert<=11)) Matrix[xx+12*yy].ICArt=4;        /* Teerbaby */
  1289.                         if((Matrix[xx+12*yy].ICType==2)&&(TestWert>=12)&&(TestWert<=12)) Matrix[xx+12*yy].ICArt=5;    /* Teergrube */
  1290.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==2)) Matrix[xx+12*yy].ICStufe=Zufallszahl(2,6);
  1291.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==3)) Matrix[xx+12*yy].ICStufe=Zufallszahl(2,6);
  1292.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==4)) Matrix[xx+12*yy].ICStufe=Zufallszahl(1,6)+Zufallszahl(1,6);
  1293.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==5)) Matrix[xx+12*yy].ICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+1;
  1294.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==6)) Matrix[xx+12*yy].ICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6);
  1295.                         if((Matrix[xx+12*yy].ICType>0)&&(Matrix[xx+12*yy].Secure==7)) Matrix[xx+12*yy].ICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6)+3;
  1296.                         }
  1297.                     }
  1298.                 if((Matrix[xx+12*yy].Type==4)&&(Matrix[xx+12*yy].WichtigeDaten==TRUE)){
  1299.                     if(AlwaysICInfo==TRUE){
  1300.                         Matrix[xx+12*yy].WDICType=1;
  1301.                         Matrix[xx+12*yy].WDICArt=3;
  1302.                         if(Matrix[xx+12*yy].Secure==2) Matrix[xx+12*yy].WDICStufe=Zufallszahl(2,6);
  1303.                         if(Matrix[xx+12*yy].Secure==3) Matrix[xx+12*yy].WDICStufe=Zufallszahl(2,6);
  1304.                         if(Matrix[xx+12*yy].Secure==4) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6);
  1305.                         if(Matrix[xx+12*yy].Secure==5) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+1;
  1306.                         if(Matrix[xx+12*yy].Secure==6) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6);
  1307.                         if(Matrix[xx+12*yy].Secure==7) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6)+3;
  1308.                         }
  1309.                     else{
  1310.                         if(Zufallszahl(1,6)==1){
  1311.                             Matrix[xx+12*yy].WDICType=1;
  1312.                             Matrix[xx+12*yy].WDICArt=3;
  1313.                             if(Matrix[xx+12*yy].Secure==2) Matrix[xx+12*yy].WDICStufe=Zufallszahl(2,6);
  1314.                             if(Matrix[xx+12*yy].Secure==3) Matrix[xx+12*yy].WDICStufe=Zufallszahl(2,6);
  1315.                             if(Matrix[xx+12*yy].Secure==4) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6);
  1316.                             if(Matrix[xx+12*yy].Secure==5) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+1;
  1317.                             if(Matrix[xx+12*yy].Secure==6) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6);
  1318.                             if(Matrix[xx+12*yy].Secure==7) Matrix[xx+12*yy].WDICStufe=Zufallszahl(1,6)+Zufallszahl(1,6)+Zufallszahl(1,6)+3;
  1319.                             }
  1320.                         }
  1321.                     }
  1322.                 }
  1323.             }
  1324.         }
  1325.     }
  1326.  
  1327. void MatrixCheckLevelCode(){
  1328. int xx,yy;
  1329. int HighestSecure,HighestStufe;
  1330.     if(CheckLevelCode==TRUE){
  1331.         HighestSecure=0;
  1332.         HighestStufe=0;
  1333.         for(yy=0;yy<12;yy++){
  1334.             for(xx=0;xx<12;xx++){
  1335.                 if(Matrix[xx+12*yy].Secure>HighestSecure) HighestSecure=Matrix[xx+12*yy].Secure;
  1336.                 if(Matrix[xx+12*yy].Stufe>HighestStufe) HighestStufe=Matrix[xx+12*yy].Stufe;
  1337.                 }
  1338.             }
  1339.         printf("Stufe : %i\n",HighestStufe);
  1340.         printf("Secure: %i\n",HighestSecure);
  1341.         for(yy=0;yy<12;yy++){
  1342.             for(xx=0;xx<12;xx++){
  1343.                 if(Matrix[xx+12*yy].Secure<(HighestSecure-2)) Matrix[xx+12*yy].Secure=Zufallszahl((HighestSecure-2),HighestSecure);
  1344.                 if(Matrix[xx+12*yy].Stufe<(HighestStufe/2)) Matrix[xx+12*yy].Stufe=Zufallszahl((HighestStufe/2),HighestStufe);
  1345.                 }
  1346.             }
  1347.         }
  1348.     }
  1349.